package main

import "fmt"

/*
使用两个指针表示窗口的左右边界

右指针不断向右移动扩展窗口

当遇到重复字符时，左指针移动到重复字符的下一个位置

使用哈希表记录字符及其最新出现的位置
*/
func lengthOfLongestSubstring(s string) int {
	maxLen := 0
	left := 0
	data := make(map[string]int)
	for i := 0; i < len(s); i++ {
		if _, ok := data[string(s[i])]; ok {
			fmt.Printf("交换前left:%d   交换后：%d \n", left, data[string(s[i])]+1)
			left = max(left, data[string(s[i])]+1)
		}
		data[string(s[i])] = i
		maxLen = max(maxLen, i-left+1)

	}
	return maxLen
}

func main() {
	s := "pwwkew"
	L := lengthOfLongestSubstring(s)
	fmt.Println(L)
}
